/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 * @desc 方法1：暴力枚举时间复杂度：O(N^2)，其中 N 是数组中的元素数量。最坏情况下数组中任意两个数都要被匹配一次。

 空间复杂度：O(1)。

 作者：力扣官方题解
 链接：https://leetcode.cn/problems/two-sum/solutions/434597/liang-shu-zhi-he-by-leetcode-solution/
 */
var twoSum = function (nums, target) {
    for (let i = 0; i < nums.length; i++) {
        for (let j = i + 1; j < nums.length; j++) {
            if (target - nums[i] === nums[j]) {
                return [i, j];
            }
        }
    }
    console.log("No two sum solution");
};

let a = [3, 2, 4]
let b = 6
console.log(twoSum(a, b))

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 * @desc 方法2两遍哈希表
 * 时间复杂度：O(N)，其中 N 是数组中的元素数量。对于每一个元素 x，我们可以 O(1) 地寻找 target - x。
 空间复杂度：O(N)，其中 N 是数组中的元素数量。主要为哈希表的开销。

 */
var twoSum2 = function (nums, target) {
    // 构造哈希表
    var map = new Map();
    for (let i = 0; i < nums.length; i++) {
        map.set(nums[i], i);
    }
    for (let j = 0; j < nums.length; j++) {
        let complement = target - nums[j];
        if (map.has(complement) && map.get(complement) !== j) {
            return [j, map.get(complement)];
        }
    }
    console.log("No two sum solution");
};
/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 * @desc 一遍哈希表
 */
var twoSum3 = function (nums, target) {
    // 构造哈希表
    var map = new Map();
    for (let i = 0; i < nums.length; i++) {
        let complement = target - nums[i];
        if (map.has(complement)) {
            return [map.get(complement), i];
        }
        map.set(nums[i], i);
    }
    console.log("No two sum solution");
};
